<?php

Class Proposta{
	
	public $proposta;
	public $logradouro;
	public $formatroca;
	public $ds_formatroca;
	public $status;
	public $ds_status;
	public $obs;
	
	//Meio gambe, mas precisa... pra exibição e tudo mais 
	public $cdExemplar_dono;
	public $cdUsuario_dono;
	public $nmUsuario_dono;
	public $dsEmail_dono;
	public $flgTroca_dono;
	public $cdUsuario_interessado;
	public $nmUsuario_interessado;
	public $dsEmail_interessado;
	public $flgTroca_interessado;
	public $cdItem_dono;
	public $nmItem_dono;
	public $dsPlataformaExemplar_dono;
	
	public $ExemplaresInteressado = array();
	
	function __construct($mDb, $cd_proposta, $cd_logradouro, $cd_formatroca, $cd_status, $ds_obs) {
		
		$ds_status = "";
		$ds_formatroca = "";
		$cdExemplar_dono = "";
		$cdUsuario_dono = "";
		$nmUsuario_dono = "";
		$dsEmail_dono = "";
		$flgTroca_dono = "";
		$cdUsuario_interessado = "";
		$nmUsuario_interessado = "";
		$dsEmail_interessado = "";
		$flgTroca_interessado = "";
		$cdItem_dono = "";
		$nmItem_dono = "";
		$dsPlataformaExemplar_dono = "";
		$contador = 0;
		
		$cdExemplar_interessado = array();
		$cdItem_interessado = array();
		$nmItem_interessado = array();
		$dsPlataformaExemplar_interessado = array();
		
		$ExemplaresInteressado = new stdClass();
		
		if ($cd_proposta <> 0) {
						
			$result = $mDb->query("SELECT * FROM usuario_proposta
								  WHERE usuario_proposta.cd_proposta = '$cd_proposta';",
								  PDO::FETCH_ASSOC);
	
			if ($result->rowCount() > 0) {
				while($usuario_proposta = $result->fetch()){

					//Usuario DONO do ITEM da Proposta (ou seja, quem Recebeu a Proposta)
					$cdUsuario_dono = $usuario_proposta['cd_usuario_dono'];
					$result_usuario = $mDb->query("SELECT * FROM usuario
												  WHERE usuario.cd_usuario = '$cdUsuario_dono';",
												  PDO::FETCH_ASSOC);
				
					if ($result_usuario->rowCount() > 0) {
						while($usuario_dono = $result_usuario->fetch()){
							
							if ($cd_status == 2) { //Em análise
								$dsEmail_dono = $usuario_dono['ds_email'];
							}
							
							$nmUsuario_dono = $usuario_dono['nm_usuario'];
						}
					}
					
					//Usuario INTERESSADO no ITEM da Proposta (ou seja, quem Enviou a Proposta)
					$cdUsuario_interessado = $usuario_proposta['cd_usuario_interessado'];
					$result_usuario = $mDb->query("SELECT * FROM usuario
												  WHERE usuario.cd_usuario = '$cdUsuario_interessado';",
												  PDO::FETCH_ASSOC);
				
					if ($result_usuario->rowCount() > 0) {
						while($usuario_interessado = $result_usuario->fetch()){
							
							if ($cd_status == 2) { //Em análise
								$dsEmail_interessado = $usuario_interessado['ds_email'];
							}
							
							$nmUsuario_interessado = $usuario_interessado['nm_usuario'];
						}
					}
				}
			}
			// Retona exemplar do DONO envolvido, e array de exemplares do INTERESSADO
			$result = $mDb->query("SELECT * FROM exemplar_proposta
								  WHERE exemplar_proposta.cd_proposta = '$cd_proposta';",
								  PDO::FETCH_ASSOC);
	
			if ($result->rowCount() > 0) {
				while($exemplar_proposta = $result->fetch()){	
					$cdExemplar_dono = $exemplar_proposta['cd_exemplar_dono'];
					
					$cdExemplar_interessado[$contador] = $exemplar_proposta['cd_exemplar_interessado'];
					$contador++;
				}
			}
			
			//Procura trocas confirmadas, de cada usuário para essa proposta
			$result_trocas = $mDb->query("SELECT * FROM troca_proposta
										  WHERE troca_proposta.cd_proposta  = '$cd_proposta';",
										  PDO::FETCH_ASSOC);
		
			if ($result_trocas->rowCount() > 0) {
				while($trocas = $result_trocas->fetch()){
					
					if ($cdUsuario_interessado == $trocas['cd_usuario']){
						$flgTroca_interessado = $trocas['flg_trocado'];
					} 
					
					if ($cdUsuario_dono == $trocas['cd_usuario']){
						$flgTroca_dono = $trocas['flg_trocado'];
					} 
				
				}
			}			
		}
		
		if ($cdExemplar_dono <> 0) {
			$result = $mDb->query("SELECT * FROM `exemplar`,
												 `item`,
												 `plataforma`
									 WHERE `exemplar`.`cd_exemplar` = '$cdExemplar_dono'
									   AND `item`.`cd_item` = `exemplar`.`cd_item`
									   AND `plataforma`.`cd_plataforma` = `exemplar`.`cd_plataforma`",
									   PDO::FETCH_ASSOC);						  

			if ($result->rowCount() > 0) {
				while($exemplar_item = $result->fetch()){		
					$cdItem_dono = $exemplar_item['cd_item'];
					$nmItem_dono = $exemplar_item['nm_item'];
					$dsPlataformaExemplar_dono = $exemplar_item['ds_plataforma'];
				}
			}
		}	
		
		$contador = 0;
		foreach ($cdExemplar_interessado as $exemplar) {

			if ($exemplar <> "0") {
				$result = $mDb->query("SELECT * FROM `exemplar`,
													 `item`,
													 `plataforma`
										 WHERE `exemplar`.`cd_exemplar` = '$exemplar'
										   AND `item`.`cd_item` = `exemplar`.`cd_item`
										   AND `plataforma`.`cd_plataforma` = `exemplar`.`cd_plataforma`",
										   PDO::FETCH_ASSOC);						  

				if ($result->rowCount() > 0) {
					while($exemplar_item = $result->fetch()){	
						$cdItem_interessado[$contador] = $exemplar_item['cd_item'];
						$nmItem_interessado[$contador] = $exemplar_item['nm_item'];
						$dsPlataformaExemplar_interessado[$contador] = $exemplar_item['ds_plataforma'];
						$contador++;
					}
				}
			}
		}

		if ($cd_formatroca <> 0) {
			$result = $mDb->query("SELECT * FROM forma_troca
								  WHERE forma_troca.cd_forma_troca = '$cd_formatroca';",
								  PDO::FETCH_ASSOC);
	
			if ($result->rowCount() > 0) {
				while($exemplar = $result->fetch()){		
					$ds_formatroca = $exemplar['ds_forma_troca'];
				}
			}
		}
		
		if ($cd_status <> 0) {
			$result = $mDb->query("SELECT * FROM status_
								  WHERE status_.cd_status = '$cd_status';",
								  PDO::FETCH_ASSOC);
	
			if ($result->rowCount() > 0) {
				while($status = $result->fetch()){		
					$ds_status = $status['ds_status'];
				}
			}
		}

		$ExemplaresInteressado->cdExemplar = $cdExemplar_interessado;
		$ExemplaresInteressado->dsPlataforma = $dsPlataformaExemplar_interessado; 
		$ExemplaresInteressado->cdItem = $cdItem_interessado;
		$ExemplaresInteressado->nmItem = $nmItem_interessado;
		$this->ExemplaresInteressado = $ExemplaresInteressado;
		
		$this->proposta = $cd_proposta;
		$this->logradouro = $cd_logradouro;
		$this->formatroca = $cd_formatroca;
		$this->ds_formatroca = $ds_formatroca;
		$this->status = $cd_status;
		$this->ds_status = $ds_status;
		$this->obs = $ds_obs;
		
		$this->cdExemplar_dono = $cdExemplar_dono;
		$this->cdUsuario_dono = $cdUsuario_dono;
		$this->nmUsuario_dono = $nmUsuario_dono;
		$this->dsEmail_dono = $dsEmail_dono;
		$this->flgTroca_dono = $flgTroca_dono;
		$this->cdUsuario_interessado = $cdUsuario_interessado;
		$this->nmUsuario_interessado = $nmUsuario_interessado;
		$this->dsEmail_interessado = $dsEmail_interessado;
		$this->flgTroca_interessado = $flgTroca_interessado;
		
		$this->cdItem_dono = $cdItem_dono;
		$this->nmItem_dono = $nmItem_dono;
		$this->dsPlataformaExemplar_dono = $dsPlataformaExemplar_dono;
	}
	
	function insereProposta($mDb, $exemplar_dono, $exemplares_interessado) {
		
		$cdUsuario_dono = "";
		$cdUsuario_interessado = "";
		$idExemplar_interessado = "";
		
		//Insere Proposta
		try{
			$mDb->exec('INSERT INTO `proposta`
						(`cd_status`, 
						 `cd_forma_troca`, 
						 `cd_logradouro`, 
						 `ds_obs`)'
				.'VALUES (\''.$this->status.'\',
						  \''.$this->formatroca.'\',
						  \''.$this->logradouro.'\',
						  \''.$this->obs.'\');'
						  );
						  
		} catch(Exception $e) {
			echo $e->getMessage();
		}
		
		$id_proposta_criada = $mDb->lastInsertId();
		
		$result = $mDb->query("SELECT * FROM exemplar
								  WHERE exemplar.cd_exemplar = '$exemplar_dono';",
								  PDO::FETCH_ASSOC);
	
		if ($result->rowCount() > 0) {
			while($exemplar = $result->fetch()){		
				$cdUsuario_dono = $exemplar['cd_usuario'];
			}
		}	
		
		//Pega o primeiro item do array, porque o mínimo para a proposta é 1 item, e todos pertencem ao 
		$idExemplar_interessado = $exemplares_interessado[0];
		$result = $mDb->query("SELECT * FROM exemplar
								  WHERE exemplar.cd_exemplar = '$idExemplar_interessado';",
								  PDO::FETCH_ASSOC);
	
		if ($result->rowCount() > 0) {
			while($exemplar = $result->fetch()){		
				$cdUsuario_interessado = $exemplar['cd_usuario'];
			}
		}	
		
		// Insere registro que liga Usuário à Proposta
		try{
			$mDb->exec('INSERT INTO `usuario_proposta`
						(`cd_usuario_dono`, 
						 `cd_proposta`,
						 `cd_usuario_interessado`)'
				.'VALUES (\''.$cdUsuario_dono.'\',
						  \''.$id_proposta_criada.'\',
						  \''.$cdUsuario_interessado.'\');'
						  );
						  
		} catch(Exception $e) {
			echo $e->getMessage();
		}		
		
		foreach ($exemplares_interessado as $exemplar) {
			// Insere registro que liga Exemplar à Proposta
			try{
				$mDb->exec('INSERT INTO `exemplar_proposta`
							(`cd_exemplar_dono`, 
							 `cd_proposta`,
							 `cd_exemplar_interessado`)'
					.'VALUES (\''.$exemplar_dono.'\',
							  \''.$id_proposta_criada.'\',
							  \''.$exemplar.'\');'
							  );
							  
			} catch(Exception $e) {
				echo $e->getMessage();
			}
		}
		
		$this->proposta = $id_proposta_criada;
		$this->cdUsuario_dono = $cdUsuario_dono;
		$this->cdUsuario_interessado = $cdUsuario_interessado;
	}
	
	function confirmaProposta($mDb) {
		
		try{
			$mDb->exec('UPDATE `proposta`
						   SET `cd_status` = 2
						 WHERE `cd_proposta` = (\''.$this->proposta.'\');');
						  
		} catch(Exception $e) {
			echo $e->getMessage();
		}
		
		// Insere registro de troca p/ usuario
		try{
			$mDb->exec('INSERT INTO `troca_proposta`
						(`cd_usuario`, 
						 `cd_proposta`)'
				.'VALUES (\''.$this->cdUsuario_dono.'\',
						  \''.$this->proposta.'\');'
						  );
						  
		} catch(Exception $e) {
			echo $e->getMessage();
		}
		
		try{
			$mDb->exec('INSERT INTO `troca_proposta`
						(`cd_usuario`, 
						 `cd_proposta`)'
				.'VALUES (\''.$this->cdUsuario_interessado.'\',
						  \''.$this->proposta.'\');'
						  );
						  
		} catch(Exception $e) {
			echo $e->getMessage();
		}
		// FIM		
	}
	
	function recusaProposta($mDb) {
		
		try{
			$mDb->exec('DELETE FROM `usuario_proposta`
						 WHERE `cd_proposta` = (\''.$this->proposta.'\');');
						  
		} catch(Exception $e) {
			echo $e->getMessage();
		}
		
		try{
			$mDb->exec('DELETE FROM `exemplar_proposta`
						 WHERE `cd_proposta` = (\''.$this->proposta.'\');');
						  
		} catch(Exception $e) {
			echo $e->getMessage();
		}
		
		try{
			$mDb->exec('DELETE FROM `troca_proposta`
						 WHERE `cd_proposta` = (\''.$this->proposta.'\');');
						  
		} catch(Exception $e) {
			echo $e->getMessage();
		}
		
		try{
			$mDb->exec('DELETE FROM `proposta`
						 WHERE `cd_proposta` = (\''.$this->proposta.'\');');
						  
		} catch(Exception $e) {
			echo $e->getMessage();
		}
		
	}
	
	function trocaExemplaresProposta($mDb, $cdUsuario) {
		
		$efetua_troca = true;
		$cdProposta = $this->proposta;
		
		$cdUsuario_dono = "";
		$cdUsuario_interessado = "";
		$cdExemplar_interessado = array();
		$cdExemplar_dono = "";
		$contador = 0;
		
		
		try{
			$mDb->exec('UPDATE `troca_proposta`
						   SET `flg_trocado` = 1
						 WHERE `cd_usuario`  = (\''.$cdUsuario.'\')
						   AND `cd_proposta` = (\''.$cdProposta.'\');');
						  
		} catch(Exception $e) {
			echo $e->getMessage();
		}
		
		$result = $mDb->query("SELECT * FROM troca_proposta
							  WHERE `troca_proposta`.`cd_proposta` = '$cdProposta';",
							  PDO::FETCH_ASSOC);

		if ($result->rowCount() > 0) {
			while($trocas = $result->fetch()){		
				if ($trocas['flg_trocado'] == 0) {
					$efetua_troca = false;
				}
			}
		}
		
		if ($efetua_troca == true) {
			// Pega exemplares
			$result = $mDb->query("SELECT * FROM exemplar_proposta
								  WHERE exemplar_proposta.cd_proposta = '$cdProposta';",
								  PDO::FETCH_ASSOC);
	
			if ($result->rowCount() > 0) {
				while($exemplar_proposta = $result->fetch()){	
					$cdExemplar_dono = $exemplar_proposta['cd_exemplar_dono'];
					$cdExemplar_interessado[$contador] = $exemplar_proposta['cd_exemplar_interessado'];
					$contador++;
				}
			}
			//Pega usuários
			$result = $mDb->query("SELECT * FROM usuario_proposta
								  WHERE usuario_proposta.cd_proposta = '$cdProposta';",
								  PDO::FETCH_ASSOC);
	
			if ($result->rowCount() > 0) {
				while($usuario_proposta = $result->fetch()){
					$cdUsuario_dono = $usuario_proposta['cd_usuario_dono'];
					$cdUsuario_interessado = $usuario_proposta['cd_usuario_interessado'];
				}
			}
			
			//Percorre exemplares do interessado e os associa ao dono
			foreach ($cdExemplar_interessado as $exemplar) {

				if ($exemplar <> "0") {
					try{
						$mDb->exec('UPDATE `exemplar`
									   SET `cd_usuario`  = (\''.$cdUsuario_dono.'\')
									 WHERE `cd_exemplar` = (\''.$exemplar.'\');');
									  
					} catch(Exception $e) {
						echo $e->getMessage();
					}		
				}
			}
			//Associa exemplar do dono ao interessado
			try{
				$mDb->exec('UPDATE `exemplar`
							   SET `cd_usuario`  = (\''.$cdUsuario_interessado.'\')
							 WHERE `cd_exemplar` = (\''.$cdExemplar_dono.'\');');
							  
			} catch(Exception $e) {
				echo $e->getMessage();
			}
		
			//Atualiza status da proposta
			try{
				$mDb->exec('UPDATE `proposta`
							   SET `cd_status` = 3
							 WHERE `cd_proposta` = (\''.$cdProposta.'\');');
							  
			} catch(Exception $e) {
				echo $e->getMessage();
			}
		}
	
	}
}

?>